home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The CICA Windows Explosion!
/
The CICA Windows Explosion! - Disc 2.iso
/
programr
/
appsrcs.zip
/
APPEXIT.ZIP
/
APPEXIT.C
next >
Wrap
C/C++ Source or Header
|
1993-05-02
|
5KB
|
158 lines
/*-------------------------------------------------------------------------
AppExit.c
A Exit Windows utility for AppBar.
by
GMP van kempen
NEVERnever Software 1993
4.00.1 Initial release
4.00.2 added "now" commandline option to exit Windows immediately.
made "OK" button default push button.
---------------------------------------------------------------------------*/
//compile with the strictest error checking
#define STRICT
#include <windows.h>
#include <windowsx.h>
#include <ctl3d.h>
#include <stdio.h>
#include <string.h>
#include "appexit.h"
#define MAKECHILD(a,b,c,d,e,f,g,h) CreateWindow(a,b,WS_CHILD | WS_VISIBLE | c,d,e,f,g,hWnd,h,hInst,(LPSTR) NULL)
#define MAKEBUTTON(a,b,c,d,e,f) MAKECHILD("button",a,BS_PUSHBUTTON,b,c,d,e,f)
#define MAKEDEFBUTTON(a,b,c,d,e,f) MAKECHILD("button",a,BS_DEFPUSHBUTTON,b,c,d,e,f)
#define MAKETEXT(a,b,c,d,e) MAKECHILD("static",a,SS_CENTER,b,c,d,e,(HMENU) -1)
#define MAKESTATIC(a,b,c,d) MAKECHILD("static",NULL,SS_BLACKRECT,a,b,c,d,(HMENU) -1)
#define MAKEBORDER(a,b,c,d) MAKECHILD("static",NULL,SS_WHITERECT,a,b,c,d,(HMENU) -1)
char szAppName[] = "AppExit";
HINSTANCE hInst;
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS wndclass;
int xScreen, yScreen, yCaption, xSize, ySize;
if(_fstrstr(lpszCmdLine, "now"))
{
ExitWindows(NULL, NULL);
return msg.wParam;
}
if(!hPrevInstance)
{
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(hInstance, szAppName);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = GetStockBrush(LTGRAY_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
RegisterClass(&wndclass);
}
hInst = hInstance;
xScreen = GetSystemMetrics(SM_CXSCREEN);
yScreen = GetSystemMetrics(SM_CYSCREEN);
yCaption = GetSystemMetrics(SM_CYCAPTION);
Ctl3dRegister(hInstance);
Ctl3dAutoSubclass(hInstance);
xSize = 260;
ySize = 93 + yCaption;
hWnd = CreateWindow(szAppName, "AppExit 4.0",
WS_POPUP | WS_SYSMENU | WS_CAPTION |
WS_MINIMIZEBOX | WS_VISIBLE,
(xScreen - xSize)/2, yScreen/2 - ySize,
xSize, ySize,
NULL, (HMENU) NULL, hInstance, NULL);
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Ctl3dUnregister(hInstance);
return msg.wParam;
} /* end WinMain */
/*------------------------------------------------------------------------/
FUNCTION: WndProc()
/------------------------------------------------------------------------*/
long WINAPI WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
char *Button[3] = {"&No","&Yes","&Restart"};
HBRUSH hbrush;
HWND hWndButton[3];
switch (message)
{
case WM_CREATE:
// create static frame around text fields
Ctl3dSubclassCtl(MAKEBORDER(0, 0, 258, 92));
Ctl3dSubclassCtl(MAKESTATIC(9, 9, 242, 42));
hWndButton[0] = MAKEBUTTON(Button[0], 10, 60, 80, 24, IDC_BUTTONS);
hWndButton[1] = MAKEDEFBUTTON(Button[1], 10+80, 60, 80, 24, IDC_BUTTONS+1);
hWndButton[2] = MAKEBUTTON(Button[2], 10+160, 60, 80, 24, IDC_BUTTONS+2);
Ctl3dSubclassCtl(MAKETEXT("Leave Windows?", 20, 16, 220, 20));
return 0;
case WM_SYSCOLORCHANGE:
Ctl3dColorChange();
break;
case WM_CTLCOLOR:
hbrush = Ctl3dCtlColorEx(message, wParam, lParam);
if(hbrush != (HBRUSH) FALSE)
return hbrush;
else
return DefWindowProc(hWnd, message, wParam, lParam);
case WM_KEYDOWN:
if(wParam == VK_RETURN)
SendMessage(hWnd, WM_COMMAND, IDC_BUTTONS+1, 0);
return 0;
case WM_COMMAND:
switch(wParam)
{
case IDC_BUTTONS: /* No */
SendMessage(hWnd, WM_DESTROY, 0, 0);
break;
case IDC_BUTTONS+1: /* Yes */
ExitWindows(NULL, NULL);
break;
case IDC_BUTTONS+2: /* Restart */
ExitWindows(EW_RESTARTWINDOWS, NULL);
break;
}
break;
case WM_DESTROY: // kill the whole program
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
} /* end WndProc */